﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using System.Runtime.Serialization;


namespace MoviTiendas.Logica
{
    [DataContract]
    public class SubCategoria
    {
         [DataMember]
        public String nombre { get; set; }
         [DataMember]
        public List<Item> items { get; set; }
         [DataMember]
        public Tienda tienda { get; set; }

        public SubCategoria(String nombre, Tienda tienda)
        {
            this.nombre = nombre;
            this.tienda = tienda;
            items = new List<Item>();

        }

        public SubCategoria(String nombre, Tienda tienda, List<Item> items)
        {
            this.nombre = nombre;
            this.tienda = tienda;
            this.items = items;

        }


        public void agregarItem(Item item)
        {
            if(!items.Contains(item))
             items.Add(item);

        }
        public SubCategoria darCopiaSubcategoria()
        {
            SubCategoria sub = new SubCategoria(nombre, tienda);
            foreach (Item item in items)
            {
                sub.agregarItem(item);
            }

            return sub;
        }



        public List<Producto> darProductosConSoloItemsPropios()
        {
            /*
            String deb ="";
                foreach(Item i in items)
                {
                    deb += i.producto.nombre + " Tie: " + i.tienda.nombre + "\n";
                }
                MessageBox.Show("Subcategoria: " + nombre + "Tie  "+tienda.nombre + ", \n items: " + deb);
            */
           List<Producto> listaProd = new List<Producto>(items.Count);
            /*
           foreach (Item item in items)
           {
               Producto prod = new Producto(item.producto.nombre, item.producto.imagen);
               prod.agregarItem(item);
               listaProd.Add(prod);
           }
           */
           bool encontro = false;
           Producto prodNuevo;

           foreach (Item item in items)
           {
               Producto prodItem = item.producto;

               for (int i = 0; i < listaProd.Count && !encontro; i++)
               {
                   prodNuevo = listaProd[i];
                   if (prodNuevo.nombre.Equals(prodItem.nombre))
                   {
                       encontro = true;
                       prodNuevo.agregarItem(item);
                   }
               }
               if (!encontro)
               {
                   prodNuevo = new Producto(prodItem.nombre, prodItem.imagen);
                   prodNuevo.agregarItem(item);
                   listaProd.Add(prodNuevo);
               }

               encontro = false;
           }

            return listaProd;
        }

        public void incluirItemsPropiosEnProductos(List<Producto> productos)
        {
            /*
            String deb = "";
            foreach (Item i in items)
            {
                deb += i.producto.nombre + " Tie: " + i.tienda.nombre + "\n";
            }
            MessageBox.Show("Subcategoria: " + nombre + "Tie  " + tienda.nombre + ", \n items: " + deb);
                  */

            bool encontroProducto = false;
            foreach (Item item in items)
            {
                encontroProducto = false;
                foreach (Producto prod in productos)
                {                  
                    if (item.producto.nombre.Equals(prod.nombre))
                    {
                        encontroProducto = true;
                        if (!prod.items.Contains(item))
                        {
                            prod.agregarItem(item);
                        }
                    }
                }
                if (!encontroProducto)
                {
                    Producto prodNuevo = new Producto(item.producto.nombre, item.producto.imagen);
                    prodNuevo.agregarItem(item);
                    productos.Add(prodNuevo);
                }
            }
        }
            /*
            bool encontro = false;

            List<Item> actuales = new List<Item>(items);
            List<Producto> prods = new List<Producto>(productos);

            foreach (Producto prod in prods)
            {
                foreach (Item item in items)
                {
                    if (item.producto.nombre.Equals(prod.nombre))
                    {
                        encontro = false;
                        for (int i = 0; i < prod.items.Count && !encontro; i++)
                        {
                            Item itemProd = prod.items[i];
                            if (itemProd.tienda.nombre.Equals(item.tienda.nombre))
                            {
                                encontro = true;
                                actuales.Remove(item);
                            }

                        }

                        if (!encontro)
                        {
                            prod.agregarItem(item);
                            actuales.Remove(item);

                        }
                    }
                }
            }

            foreach (Item item in actuales)
            {
                Producto prod = new Producto(item.producto.nombre, item.producto.imagen);
                prod.agregarItem(item);
                productos.Add(prod);
            }*/
        


    }
}
